/*
 * Background_Detect.cpp

 *
 *  Created on: 13/11/2013
 *      Author: Administrador
 */

#include "Mytypes.h"
#include "Background_Detect.h"

 using namespace cv;
 using namespace std;

 //******************************* BACKGROUND DETECT  **********************************
 int Background_Detect(){
	 //Creamos los objetos MAT
	 Mat Frame,Fore,Back;
	 //Capturaremos iumagenes de la camara.
	 VideoCapture cap(0);
     //Comprobamos que efectivamente se abrio correctamente la camara
	 if (!cap.isOpened()){
             cout << "Cannot load Video!" << endl;
     return -1;
     }
	 //Creamos un objeto Clase BackgroundSubstract MOG
	 BackgroundSubtractorMOG2 BackG_Mog;

	 //BackG_Mog.bShadowDetection = false;
	 //BackG_Mog.nmixtures = 3; // Valores maximos de mixtures



	 std::vector<std::vector<cv::Point> > contours;

	 while(1){

	     bool prueba = cap.read(Frame);

	     if (!prueba) //if not success, break loop
	     {
	                     cout << "Cannot read the frame from video file" << endl;
	                     break;
	     }

	     //Calculamos la imagen que se agrega y es el Foreground
	     BackG_Mog.operator ()(Frame,Fore);
	     //Obtenemos la imagen de comparacion "Background"
	     BackG_Mog.getBackgroundImage(Back);

	     //Eliminamos Ruido de la imagen foreground
	     erode(Fore,Fore,Mat());
	     dilate(Fore,Fore,Mat());
	     //Dibujamos el contorno de los objetos
	     findContours(Fore,contours,CV_RETR_EXTERNAL,CV_RETR_TREE  );
	     drawContours(Frame,contours,-1,Scalar(0,191,255),2);
	     //Nombramos las 2 imagenes
	     namedWindow("Frame", CV_WINDOW_AUTOSIZE);
	     namedWindow("Background Detect", CV_WINDOW_AUTOSIZE);
	     //Mostramos las imagenes
	     imshow("Frame", Frame);
	     imshow("Background Detect", Back);

	    //Esperamos a que se presione la tecla ESC
	     if(waitKey(30) == 27)
	    {
	             cout << "esc key is pressed by user" << endl;
	             break;
	    }




	 }

	 return 0;

 }

